package com.fancy.projecty.B_流程实例;

import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


/**
 * 处理当前用户的任务
 * 背后操作的表：
 * act_hi_actinst
 * act_hi_identitylink
 * act_hi_taskinst
 * act_ru_identitylink
 * act_ru_task
 * <p>
 * 正常情况下 任务的查询和处理应该是在一起去写的,
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class D_处理流程实例 {
	@Autowired
	/*管理流程定义,部署相关的Service*/
	private RepositoryService repositoryService;
	@Autowired
	/*执行管理、包括启动、推进、删除流程实例等操作*/
	private RuntimeService runtimeService;
	@Autowired
	/*任务管理,可以做任务的查询的*/
	private TaskService taskService;

	@Test
	public void c_王五处理自己的任务() {
		Task task = this.taskService.createTaskQuery()
				.processDefinitionKey("holiday")
				.taskAssignee("wangwu")
				.singleResult();

		if (task != null) {
			String id = task.getId();  //获取任务id
			this.taskService.complete(id);
		}
	}


	@Test
	public void c_李四处理自己的任务() {
		//7502
		this.taskService.complete("7502");


	}


	@Test
	public void c_张三处理自己的任务() {
  	/*这个taskId 应该是张三通过当前流程的key和任务的执行者 这两个条件动态的查询出来,
  	而不是直接去数据库里面写死的
  	* */

		// 如果 没有这个任务的话,会抛异常出来
		//org.activiti.engine.ActivitiObjectNotFoundException: Cannot find task with id 5004
		this.taskService.complete("140002");
	}


}
